// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once // 防止头文件被重复包含

#include "Messages/GameplayMessageProcessor.h" // 包含游戏消息处理器基类

#include "ElimStreakProcessor.generated.h" // 包含由Unreal Header Tool生成的代码

class APlayerState; // 前向声明玩家状态类
class UObject; // 前向声明UObject基类
struct FGameplayTag; // 前向声明游戏标签结构体
struct FLyraVerbMessage; // 前向声明Lyra动词消息结构体
template <typename T> struct TObjectPtr; // 前向声明模板类TObjectPtr

// 追踪击杀连胜（连续X次击杀而没有被击杀）
UCLASS(Abstract) // 标记为抽象类，不可直接实例化
class UElimStreakProcessor : public UGameplayMessageProcessor // 继承自游戏消息处理器
{
	GENERATED_BODY() // 生成反射函数体

public:
	virtual void StartListening() override; // 开始监听消息的虚函数

protected:
	// 当玩家达到特定长度的击杀连胜时重新广播的事件标签
	UPROPERTY(EditDefaultsOnly) // 仅在默认值编辑中可见的属性
	TMap<int32, FGameplayTag> ElimStreakTags; // 映射：连胜次数 -> 游戏标签

private:
	void OnEliminationMessage(FGameplayTag Channel, const FLyraVerbMessage& Payload); // 处理击杀消息的私有函数

private:
	UPROPERTY(Transient) // 标记为临时属性，不保存到磁盘
	TMap<TObjectPtr<APlayerState>, int32> PlayerStreakHistory; // 玩家击杀连胜历史记录映射
};